<?php

declare(strict_types=1);

/**
 * Holiya 命令行工具
 *
 * @package Shenlink\Holiya\Console\Command
 */

namespace Shenlink\Holiya\Console\Command;

/**
 * 帮助命令类
 *
 * 用于显示所有可用命令的帮助信息
 */
class HelpCommand implements ICommand
{
    /**
     * 命令列表
     *
     * @var array<ICommand>
     */
    private array $commands;

    /**
     * HelpCommand 构造函数
     *
     * @param array<ICommand> $commands 可用命令列表
     */
    public function __construct(array $commands)
    {
        $this->commands = $commands;
    }

    /**
     * 获取命令名称
     *
     * @return string 命令名称
     */
    public function getName(): string
    {
        return 'help';
    }

    /**
     * 获取命令描述
     *
     * @return string 命令描述
     */
    public function getDescription(): string
    {
        return '显示帮助信息';
    }

    /**
     * 执行命令
     *
     * @param array $arguments 命令参数
     * @return int 执行结果状态码
     */
    public function execute(array $arguments = []): int
    {
        $this->showHelp();
        return 0;
    }

    /**
     * 显示帮助信息
     *
     * @return void
     */
    public function showHelp(): void
    {
        echo "Holiya 命令行工具\n\n";
        echo "使用方法: php holiya <命令> [选项]\n\n";
        echo "可用命令:\n";

        foreach ($this->commands as $command) {
            printf("  %-20s %s\n", $command->getName(), $command->getDescription());
        }

        echo "\n运行 'php holiya help <命令>' 获取指定命令的更多信息。\n";
    }
}